﻿using System;
using System.Data;
using System.Windows.Forms;
using DevExpress.XtraEditors.DXErrorProvider;
using DevExpress.XtraLayout.Utils;
using NNS.Enumeration;
using NNS.Framework;
using NNS.UI;
using QLTB.BusinessLayer;
using QLTB.BusinessObjects;
using QLTB.Common;
using QLTB.DataAccess;

namespace QLTB.NguoiDung.UI
{
    [System.ComponentModel.ToolboxItem(false)]
    public partial class ucThemnguoidung : MyUIBase
    {
        private string _oldpwd = "";
        private EditMode mode;
        private TBL_nhanvien nhanvien;

        public ucThemnguoidung()
        {
            InitializeComponent();
            SqlHelper.Helper.Fill(CommandType.Text,
                                  "SELECT     MaDonVi, TenDonVi, CAST(MaDonVi AS NVARCHAR) + N'-' + TenDonVi AS DV FROM TBL_DONVI WHERE CapDonvi=2 ORDER BY MaDonVi",
                                  dsDonVi.TBL_DONVI);

            SqlHelper.Helper.Fill(CommandType.Text, "SELECT id, tennhom FROM TBL_nhom ORDER BY tennhom", dsNhom.TBL_nhom);

            SqlHelper.Helper.Fill(CommandType.Text, "SELECT id, chucdanh FROM TBL_chucdanh ORDER BY chucdanh",
                                  dsChucDanh.TBL_chucdanh);

            if (dsDonVi.TBL_DONVI.Rows.Count > 0)
            {
                if (txtDonVi.EditValue == null)
                {
                    txtDonVi.EditValue = dsDonVi.TBL_DONVI.Rows[0]["MaDonVi"];
                    txtDonVi.EditValue = MyLogin.Original.iddonvi;
                }
            }

            if (dsNhom.TBL_nhom.Rows.Count > 0)
            {
                if (txtQuyen.EditValue == null)
                {
                    txtQuyen.EditValue = dsNhom.TBL_nhom.Rows[0]["id"];
                }
            }

            if (dsChucDanh.TBL_chucdanh.Rows.Count > 0)
            {
                if (txtChucDanh.EditValue == null)
                {
                    txtChucDanh.EditValue = dsChucDanh.TBL_chucdanh.Rows[0]["id"];
                }
            }

            mode = EditMode.Add;

            if (!MyLogin.Original.toantinh)
            {
                txtDonVi.Enabled = false;
                txtDonVi.EditValue = MyLogin.Original.iddonvi;
                liCaptinh.Visibility = LayoutVisibility.Never;
            }

            // InitBindings();
            // InitErrorProvider();
        }

        public int ID { get; set; }


        public TBL_nhanvien Nhanvien
        {
            get { return nhanvien; }
            set
            {
                nhanvien = value;
                ID = value.id;
                txtDonVi.EditValue = value.iddonvi;
                txtQuyen.EditValue = value.idnhom;
                txtChucDanh.EditValue = value.idchucdanh;
                txthoten.Text = value.hoten;
                txtMatKhau.Text = "<Encryted>";
                _oldpwd = value.matkhau;
                txtuser.Text = value.tenuser;
                txtuser.Properties.ReadOnly = true;
                mode = EditMode.Change;
                _oldpwd = value.matkhau;
                chxCaptinh.Checked = value.toantinh;
            }
        }

        public EditMode EMode
        {
            get { return mode; }
            set
            {
                if (value == EditMode.Add)
                {
                    ClearContext();
                    txtuser.Properties.ReadOnly = false;
                    txtMatKhau.Text = "";
                }
                else
                {
                    txtMatKhau.Text = "<Encryted>";
                    txtuser.Properties.ReadOnly = true;
                }
                mode = value;
            }
        }

        public void InitErrorProvider()
        {
            //theDXErrorProvider.ContainerControl = layoutControl1;
            // Err.DataSource = nhanvien;
        }

        public void InitBindings()
        {
            //if (txtDonVi.DataBindings.Count!=0) return;
            //txtDonVi.DataBindings.Add("EditValue", nhanvien, "iddonvi");
            //txtQuyen.DataBindings.Add("EditValue", nhanvien, "idnhom");
            //// txtChucDanh.DataBindings.Add("EditValue", nhanvien, "idchucdanh");
            //txthoten.DataBindings.Add("Text", nhanvien, "hoten");
            //txtMatKhau.DataBindings.Add("EditValue", nhanvien, "matkhau");
            //txtuser.DataBindings.Add("Text", nhanvien, "tenuser");
            //chxCaptinh.DataBindings.Add("Checked", nhanvien, "toantinh");
        }

        private void ValidateData()
        {
            Check();

            if (Err.GetError(txtDonVi).Length == 0 && Err.GetErrorType(txtDonVi) == ErrorType.Critical)
            {
                btnSave.Enabled = false;
                return;
            }

            if (Err.GetError(txthoten).Length == 0 && Err.GetErrorType(txthoten) == ErrorType.Critical)
            {
                btnSave.Enabled = false;
                return;
            }

            if (Err.GetError(txtuser).Length == 0 && Err.GetErrorType(txtuser) == ErrorType.Critical)
            {
                btnSave.Enabled = false;
                return;
            }

            btnSave.Enabled = true;
        }

        public void ClearContext()
        {
            txtuser.Text = "";
            txthoten.Text = "";
            txtMatKhau.Text = "";
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            if (ParentForm != null) ParentForm.Close();
        }


        private bool Check()
        {
            txtDonVi.ErrorText = string.Empty;
            txtQuyen.ErrorText = string.Empty;
            txtChucDanh.ErrorText = string.Empty;
            txtuser.ErrorText = string.Empty;
            txthoten.ErrorText = string.Empty;

            if (txtDonVi.Text.Length == 0)
            {
                //ShowWarning("Vui lòng chọn đơn vị cơ sở!", "Thông báo");
                txtDonVi.ErrorText = "Vui lòng chọn đơn vị cơ sở!";
                //txtDonVi.Focus();
                return false;
            }


            if (txtuser.Text.Length == 0)
            {
                txtuser.ErrorText = "Tên đăng nhập không được bỏ trống!";
                //ShowWarning("Tên đăng nhập không được bỏ trống!", "Thông báo");
               // txtuser.Focus();
                return false;
            }

            if (txthoten.Text.Length == 0)
            {
                txthoten.ErrorText = "Họ và Tên không được bỏ trống!";
                //ShowWarning("Họ và Tên không được bỏ trống!", "Thông báo");
                //txthoten.Focus();
                return false;
            }

            if (txtQuyen.Text.Length == 0)
            {
                //ShowWarning("Vui lòng chọn Quyền truy cập!", "Thông báo");
                txtQuyen.ErrorText = "Vui lòng chọn Quyền truy cập!";
               // txtQuyen.Focus();
                return false;
            }

            if (txtChucDanh.Text.Length == 0)
            {
                //ShowWarning("Vui lòng chọn Quyền chọn chức danh!", "Thông báo");
               // txtChucDanh.Focus();
                Err.SetError(txtChucDanh, "Vui lòng chọn Quyền chọn chức danh!", ErrorType.Information);

                return false;
            }

            return true;
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            if (!btnSave.Enabled) return;
            Save();
        }

        private bool Save()
        {
            Cursor.Current = Cursors.WaitCursor;
            if (!Check()) return false;
            var da = new TBL_nhanvienDA();

            if (EMode == EditMode.Add)
            {
                //if (!TBL_quyenBL.Get(EnumComponent.iUser)) return false;
                if (!TBL_quyenBL.isTaomoi(EnumComponent.iUser)) return false;

                if (da.Exist(txtuser.Text))
                {
                    ShowWarning("Người dùng này đã tồn tại.", "Quản lý người dùng");
                    Cursor.Current = Cursors.Default;
                    return false;
                }
                string pwd = MyLogin.CreatePassword(txtuser.Text, txtMatKhau.Text);

                if (da.Insert(0, (int) txtDonVi.EditValue, txtuser.Text, pwd, txthoten.Text,
                              (int) txtChucDanh.EditValue, (int) txtQuyen.EditValue, chxCaptinh.Checked) > 0)
                {
                    OnSaveSuccess((null));
                    Cursor.Current = Cursors.Default;
                    return true;
                }
            }
            else if (EMode == EditMode.Change)
            {
                // if (!TBL_quyenBL.Get(EnumComponent.iUser)) return false;
                if (!TBL_quyenBL.isThaydoi(EnumComponent.iUser)) return false;

                string pwd = "";
                if (txtMatKhau.Text != "<Encryted>")
                {
                    pwd = MyLogin.CreatePassword(txtuser.Text, txtMatKhau.Text);
                }

                if (da.Update(ID, (int) txtDonVi.EditValue, txtuser.Text, pwd, txthoten.Text,
                              (int) txtChucDanh.EditValue, (int) txtQuyen.EditValue, chxCaptinh.Checked) > 0)
                {
                    txtuser.Properties.ReadOnly = false;
                    OnSaveSuccess(null);
                    Cursor.Current = Cursors.Default;
                    mode = EditMode.Add;
                    if (ParentForm != null) ParentForm.Close();
                    return true;
                }
            }

            ShowWarning(SqlHelper.Helper.LastError.Message, "Phân quyền người dùng");
            Cursor.Current = Cursors.Default;
            return false;
        }

        private void txtChucDanh_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (Save())
                {
                    if (ParentForm != null) ParentForm.Close();
                }
            }
        }

        private void OnValidated(object sender, EventArgs e)
        {
            ValidateData();
        }
    }
}